﻿using AvalonDock.Layout;
using Fluent;
using HelixToolkit.Wpf.SharpDX;
using HelixToolkit.Wpf.SharpDX.Animations;
using HelixToolkit.Wpf.SharpDX.Model.Scene;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Documents;

namespace WpfModelEditor.Core.Plugins
{
    public enum CameraType
    {
        PerspectiveCamera = 1,
        OrthographicCamera = 2
    }
    public interface IHostUI
    {
        Window Window { get; }
        Ribbon Ribbon { get; }
        StatusBar StatusBar { get; }
        Backstage Backstage { get; }
        BackstageTabControl BackstageTabControl { get; }
        RibbonTabItem GetOrCreateRibbonTabItem(string header);
        LayoutAnchorablePane BottomPanel { get; }
        LayoutAnchorablePane LeftPanel { get; }
        LayoutAnchorablePane RightPanel { get; }
    }
    public interface IHost
    {
        List<IPlugin> Plugins { get; }
        List<IIoPlugin> IoPlugins { get; }
        object SelectedObject { get; set; }
        string Mode { get; set; }
        IHostUI UI { get; }
        IAnimationUpdater SelectedAnimation { get; set; }
        TransformManipulator3D Manipulator { get; }
        Viewport3DX ActiveView { get; }
        Camera Camera { get; }
        CameraType CameraType { get; set; }
        IEffectsManager EffectsManager { get; }
        void FireEvent(string eventName, object data);
        SceneNodeGroupModel3D Model { get; }
        bool IsBusy { get; set; }
        bool RenderEnvironmentMap { get; set; }
        EnvironmentMap3D EnvironmentMap { get; }
        ShadowMap3D ShadowMap3D { get; }
        AxisPlaneGridModel3D AxisPlaneGridModel3D { get; }
        ObservableCollection<IAnimationUpdater> Animations { get; }
        void StartAnimation();
        void StopAnimation();
        void FocusCameraToScene();
        void FocusCameraToNode(SceneNode node);
        void Clear();
    }
}
